#ifndef USART_H
#define USART_H

#include <libopencm3/stm32/rcc.h>
#include <libopencm3/stm32/gpio.h>
#include <libopencm3/stm32/usart.h>

// 定义一个结构体来存储串口参数，并设置默认值
typedef struct {
    uint32_t baudrate;         // 默认波特率
    uint32_t databits;         // 默认数据位
    uint32_t stopbits;         // 默认停止位
    uint32_t parity;           // 默认校验位
    uint32_t flow_control;     // 默认流控制
    uint32_t mode;             // 默认模式
} UsartParameters;

// 初始化串口参数结构体，设置默认值
UsartParameters usart_default_params(void);

// 自动初始化指定串口，使用默认参数
void usart_auto_init(uint32_t usart);

// 手动初始化指定串口，使用自定义参数
void usart_manual_init(uint32_t usart, const UsartParameters *params);

// 函数声明
void usart_send_byte(uint32_t usart, uint8_t byte);
void usart_send_string(uint32_t usart, const char *str);
uint8_t usart_recv_byte(uint32_t usart);

#endif